package com.susu.zookeeper.curator.annotations;

import com.susu.zookeeper.curator.enums.LockTypeEnum;
import com.susu.zookeeper.curator.model.ZookeeperLock;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 基于zk锁的注解,key和condition支持SpEL表达式
 *
 * @author 苏苏
 * @date 2020/11/6 11:08
 **/
@Inherited
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ZkLock {

    /**
     * 锁的key
     * 支持SpEL表达式
     */
    String key() default "";


    /**
     * 条件
     * 支持SpEL表达式
     */
    String condition() default "true";

    /**
     * 默认可重入锁
     */
    LockTypeEnum lockType() default LockTypeEnum.RE_LOCK;

    /**
     * 等待时长,时间大于0使用
     *
     * @see ZookeeperLock#acquire(long, TimeUnit)
     * 时间小于0使用
     * @see ZookeeperLock#acquire()
     */
    long time() default -1L;


    /**
     * 时间类型 默认秒
     */
    TimeUnit unit() default TimeUnit.SECONDS;
}
